
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2008, Arizona State University
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//  Author: Adam Kubach
//
///////////////////////////////////////////////////////////////////////////////

#include "Minerva/Core/Data/Object.h"

#include "Usul/Functions/GUID.h"

using namespace Minerva::Core::Data;


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

Object::Object() : 
  BaseClass(),
  _id ( Usul::Functions::GUID::generate() ), // Make a default id.
  _targetId(),
  _mutex(),
  SERIALIZE_XML_INITIALIZER_LIST
{
  this->_addMember ( "id", _id );
  this->_addMember ( "targetId", _targetId );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Copy Constructor.
//
///////////////////////////////////////////////////////////////////////////////

Object::Object ( const Object& rhs ) : 
  BaseClass ( rhs ),
  _id( rhs._id ),
  _targetId( rhs._targetId ),
  _mutex(),
  SERIALIZE_XML_INITIALIZER_LIST
{
  this->_addMember ( "id", _id );
  this->_addMember ( "targetId", _targetId );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

Object::~Object()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the id.
//
///////////////////////////////////////////////////////////////////////////////

const Object::ObjectID& Object::objectId() const
{
  Guard guard ( this->mutex() );
  return _id;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Set the id.
//
///////////////////////////////////////////////////////////////////////////////

void Object::objectId( const ObjectID& s )
{
  Guard guard ( this->mutex() );
  _id = s;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the target id.
//
///////////////////////////////////////////////////////////////////////////////

const std::string& Object::targetId() const
{
  Guard guard ( this->mutex() );
  return _targetId;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Set the target id.
//
///////////////////////////////////////////////////////////////////////////////

void Object::targetId( const std::string& s )
{
  Guard guard ( this->mutex() );
  _targetId = s;
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the mutex.
//
///////////////////////////////////////////////////////////////////////////////

Object::Mutex& Object::mutex() const
{
  return _mutex;
}
